package com.ipzoe.cms.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.Update;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ipzoe.cms.domain.StartPage;
import com.ipzoe.cms.enums.StartPageStatusEnum;
import com.ipzoe.cms.mapper.StartPageMapper;
import com.ipzoe.cms.service.IStartPageService;
import com.ipzoe.common.exception.CustomException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 案例Service业务层处理
 *
 * @author eric
 * @date 2020-08-15
 */
@Service
public class StartPageServiceImpl extends ServiceImpl<StartPageMapper, StartPage> implements IStartPageService {

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addStartPage(StartPage startPage){

        save(startPage);

        if(StartPageStatusEnum.ENABLE.getCode().equals(startPage.getStatus())){
            LambdaUpdateWrapper<StartPage> luw = new UpdateWrapper<StartPage>().lambda()
                    .set(StartPage::getStatus, StartPageStatusEnum.UNABLE.getCode())
                    .eq(StartPage::getApp, startPage.getApp())
                    .ne(StartPage::getId, startPage.getId());
            update(luw);
        }

    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateStartPage(StartPage startPage){

        updateById(startPage);

        if(StartPageStatusEnum.ENABLE.getCode().equals(startPage.getStatus())){
            LambdaUpdateWrapper<StartPage> luw = new UpdateWrapper<StartPage>().lambda()
                    .set(StartPage::getStatus, StartPageStatusEnum.UNABLE.getCode())
                    .eq(StartPage::getApp, startPage.getApp())
                    .ne(StartPage::getId, startPage.getId());
            update(luw);
        }
    }


    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean changeStatus(Long id) {

        StartPage startPage = getById(id);
        if(startPage == null){
            throw new CustomException(400,"未找到相关前置页");
        }

        int status;
        switch (StartPageStatusEnum.getByCode(startPage.getStatus())){
            case ENABLE:
                status = StartPageStatusEnum.UNABLE.getCode();
                break;
            case UNABLE:
                status = StartPageStatusEnum.ENABLE.getCode();
                break;
            default:
                throw new CustomException(400,"前置页状态未知");
        }

        startPage.setStatus(status);
        updateById(startPage);

        if(StartPageStatusEnum.ENABLE.getCode().equals(startPage.getStatus())){
            LambdaUpdateWrapper<StartPage> luw = new UpdateWrapper<StartPage>().lambda()
                    .set(StartPage::getStatus, StartPageStatusEnum.UNABLE.getCode())
                    .eq(StartPage::getApp, startPage.getApp())
                    .ne(StartPage::getId, startPage.getId());
            update(luw);
        }

        return true;
    }
}
